#!/bin/bash

# 定义颜色输出
GREEN="\033[32m"
RED="\033[31m"
RESET="\033[0m"

# 定义日志函数
log_info() {
    echo -e "${GREEN}[INFO] $1${RESET}"
}

log_error() {
    echo -e "${RED}[ERROR] $1${RESET}"
}

# 检查是否为root用户
if [ "$(id -u)" != "0" ]; then
    log_error "检查是否为root用户"
    exit 1
fi

# 安装必要的包
log_info "安装ftp和vsftpd..."
yum -y install vsftpd ftp || {
    log_error "安装失败"
    exit 1
}

#备份vsftpd.conf文件
cp /etc/vsftpd/vsftpd.conf /etc/vsftpd/vsftpd.conf.bak

# 配置vsftpd，将vsftpd.conf中未注释的内容注释，再追加上配好的内容
log_info "配置 vsftpd..."
sed -i '/^[^#]/s/^/#/' /etc/vsftpd/vsftpd.conf
cat >> /etc/vsftpd/vsftpd.conf << 'EOF'
anonymous_enable=NO
local_enable=YES
write_enable=YES
local_umask=022
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
xferlog_std_format=YES
chroot_local_user=YES
allow_writeable_chroot=YES
chroot_list_file=/etc/vsftpd/chroot_list
listen=YES
listen_ipv6=NO
pam_service_name=vsftpd
userlist_enable=NO

# 虚拟用户配置
guest_enable=YES
guest_username=ftp
virtual_use_local_privs=YES
allow_writeable_chroot=YES
user_config_dir=/etc/vsftpd/user_conf
EOF

# # 创建虚拟用户数据库
# log_info "创建虚拟用户数据库..."
# cd /etc/vsftpd
# gdbmtool virtusers.pag <<EOF
# store ftp_user1
# 123456
# quit
# EOF

# # 验证数据库内容
# gdbmtool virtusers.pag <<EOF
# fetch ftp_user1
# quit
# EOF

#db方式创建db文件
cat > /etc/vsftpd/virtusers.txt << EOF
ftp_user1
123
ftp_user2
111
ftp_user3
222
EOF

db_load -T -t hash -f /etc/vsftpd/virtusers.txt /etc/vsftpd/virtusers.db


# 创建用户列表
log_info "创建用户列表..."
cat > /etc/vsftpd/user_list << EOF
ftp_user1
ftp_user2
ftp_user3
EOF

# 创建用户配置目录和文件
log_info "创建用户配置目录和文件..."
mkdir -p /etc/vsftpd/user_conf
echo "local_root=/data/ftp/ftp_user1" > /etc/vsftpd/user_conf/ftp_user1

# 创建FTP目录并设置权限
log_info "创建FTP目录并设置权限..."
mkdir -p /data/ftp/ftp_user1
chown -R ftp:ftp /data/ftp/

# 配置PAM认证
log_info "配置 PAM认证..."
cat > /etc/pam.d/vsftpd << 'EOF'
#%PAM-1.0
session    optional     pam_keyinit.so    force revoke
auth    sufficient      /lib64/security/pam_userdb.so    db=/etc/vsftpd/virtusers
account sufficient      /lib64/security/pam_userdb.so    db=/etc/vsftpd/virtusers
EOF

# 设置文件权限
log_info "设置db权限..."
# chmod 600 /etc/vsftpd/virtusers.pag
# chown root:root /etc/vsftpd/virtusers.pag
chmod 600 /etc/vsftpd/virtusers.db
chown root:root /etc/vsftpd/virtusers.db

# 重启服务
log_info "重启 vsftpd service..."
systemctl restart vsftpd
systemctl enable vsftpd

# 检查服务状态
if systemctl is-active vsftpd >/dev/null 2>&1; then
    log_info "vsftpd启动成功"
else
    log_error "vsftpd启动失败"
    exit 1
fi

# 输出配置信息
log_info "FTP 虚拟用户配置完成!"
log_info "虚拟用户名: ftp_user1"
log_info "密码: 123456"
log_info "curl -u 'ftp_user1':'123456' ftp://<server_ip>/"

exit 0